import argparse
import os
import sys

def gen_args():
    """
    说明
    -----
    解析命令行参数
    """
    parser = argparse.ArgumentParser(prog="批量文件重命名工具", description="批量重命名目录中的文件名, 新文件名为'目录名_文件名'")

    parser.add_argument("-d", "--dir", type=str, required=True, help="必填, 待处理目录名")
    parser.add_argument("-p", "--prefix", type=str, help="可选, 待修改文件名的前缀, 默认同目录名")
    parser.add_argument("-r", "--replace", type=bool, default=False, help="修改文件名, 默认不修改")
    parser.add_argument("-v", "--version", action="version", version="批量文件重命名工具, version 1.1", help="打印版本信息")

    args = parser.parse_args()

    return args

def batchRename(directory_name: str, prefix: str, isReplace: bool = False):
    """
    说明
    -----
    重命名文件

    参数
    -----
    directory_name: str
        待批量重命名文件的目录
    prefix: str
        文件重命名的前缀
    isReplace: bool
        是否对文件进行重命名, 默认不修改, 避免重命名后的文件名不符合要求
    """
    if not os.path.exists(directory_name):
        print(f"[Error] 目录 {directory_name} 不存在")
        sys.exit(1)

    for file in os.listdir(directory_name):
        # 如果前缀和目录名一致, 则中间建一个下划线
        if directory_name == prefix:
            new_filename = f"{prefix}_{file}"
        else:
            new_filename = f"{directory_name}{file}"
        print(f"新文件名: {os.path.join(directory_name,new_filename)}")
        if isReplace:
            os.rename(os.path.join(directory_name,file),os.path.join(directory_name,new_filename))
    
    # 提示信息
    if isReplace:
        print("文件重命名完成")
    else:
        print("[Info] 未指定 '-r True', 文件名将不修改")

if __name__ == "__main__":
    args = gen_args()
    directory_name = args.dir

    if not args.prefix:
        prefix = directory_name
    else:
        prefix = args.prefix

    batchRename(directory_name, prefix, args.replace)